﻿#pragma once
#include "AsQBasicGlobal.h"
#include <QDir>
#include <QFileInfo>
#include <QFile>

__AS_JY(Update 2023.1.7)
	/* 
		【概念区分】
		1. Path: 路径，指文件或文件夹的路径全称
		2. Location: 位置，指文件或文件夹所在的位置路径
	*/

namespace AsDefine {
	enum {
		NotCover = 0,
		Cover = 1,
		CoverFile = 1,
		CoverFolder = 1
	};
};

__AS_JY(Update 2023.1.7)
namespace As {

	// 是否存在文件/文件夹
	AS_QBASIC_EXPORT bool isExistPath(const QString& path);

	// 获取文件夹路径
	AS_QBASIC_EXPORT QString toFolderPath(QString path);

	// 获取文件/文件夹名称（文件路径） -- 可将文件路径或文件夹路径转为文件名或文件夹名
	AS_QBASIC_EXPORT QString path2name(const QString& path);

	// 删除文件（文件路径）
	AS_QBASIC_EXPORT bool deleteFile(const QString& filepath);

	// 删除文件（文件夹路径，类型筛选） -- 示例：deleteFiles("D:/folder", { "*.bmp", "*.png" }); # 删除folder文件夹下所有的bmp和png类型的文件
	AS_QBASIC_EXPORT int deleteFiles(const QString& folderPath, const QStringList& fileFilters);

	// 复制文件（源文件路径，目标文件路径，是否覆盖） -- 示例：copyFile("D:/file1.txt", "E:/file1.txt"); 若路径名不同，可改名 # 将D盘的file.txt文件复制到E盘
	AS_QBASIC_EXPORT bool copyFile(const QString& sourceFilePath, const QString& targetFilePath, bool EnableCover = AsDefine::CoverFile);

	// 复制多个文件（源文件夹路径，目标文件夹路径，类型筛选，是否覆盖） -- 示例：copyFiles("D:/folder1", "E:/folder2", { "*.bmp" }); # 将folder1文件夹下的所有bmp文件复制到folder2的文件夹下
	AS_QBASIC_EXPORT int copyFiles(const QString& sourceFolderPath, const QString& targetFolderPath, const QStringList& filters, bool EnableCover = AsDefine::CoverFile);
		
	// 创建文件夹（文件夹路径， 是否覆盖） -- 示例：createFolder("D:/folder"); # 创建一个名为folder的文件夹
	AS_QBASIC_EXPORT bool createFolder(const QString& folderPath, bool EnableCover = AsDefine::CoverFile);
		
	// 创建文件夹（文件夹位置，文件夹名称） -- 示例：createFolder("D:/", "folder"); # 创建一个名为folder的文件夹
	AS_QBASIC_EXPORT bool createFolder(const QString& folderLocation, const QString& folderName, bool EnableCover = AsDefine::CoverFile);
		
	// 复制文件夹（源文件夹路径，目标文件夹路径，是否覆盖文件夹，是否覆盖子文件）
	AS_QBASIC_EXPORT bool copyFolder(const QString& folderPath, const QString& targetPath, bool EnableCover = AsDefine::CoverFolder, bool EnableCoverSubfile = AsDefine::CoverFile);
		
	// 复制文件夹（源文件夹路径，目标文件夹路径，子文件类型筛选，是否覆盖文件夹，是否覆盖子文件）
	AS_QBASIC_EXPORT bool copyFolder(const QString& folderPath, const QString& targetPath, const QStringList& fileFilters, bool EnableCover = AsDefine::CoverFolder, bool EnableCoverSubfile = AsDefine::CoverFile);
		
	// 查找文件夹（查找位置，查找目标文件夹，查找深度）-- depth 从 0 开始，查找第1层
	AS_QBASIC_EXPORT QStringList findFolders(const QString& location, const QString& targetFolder, int depth = INT_MAX);
		
	// 查找文件（查找位置，查找文件筛选，查找深度）-- depth 从 0 开始，查找第1层
	AS_QBASIC_EXPORT QStringList findFiles(const QString& location, const QStringList& fileFilters, int depth = 0);

	// 删除文件夹（文件夹路径）
	AS_QBASIC_EXPORT int deleteFolder(const QString& folderPath);

	// 获取当前文件夹下所有图片的文件路径（文件夹路径，图片类型）
	AS_QBASIC_EXPORT QVector<QString> getImageFiles(const QString& folderPath, const QStringList& types = {"*.bmp", "*.png", "*jpg", "*.jpeg"});

};

__AS_WJ(Update 2023.1.7)
namespace As {

	// 获取文件列表
	AS_QBASIC_EXPORT QStringList getFiles(const QString& folderPath, const QString& pattern);

	AS_QBASIC_EXPORT QString getConfigDir();

};